package com.jwtter.generator;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.jwtter.generator.core.Column;
import com.jwtter.generator.utils.Keyword;
import com.jwtter.generator.utils.PropertiesUtils;
import com.jwtter.generator.utils.StringUtils;
import com.jwtter.generator.utils.Symbols;

/**
 * @date 2017年6月20日
 * @author jinwt
 *
 */
public class JavaFileGenerator {
	/**
	 * 
	 * @param dataType
	 *            数据类型 ，
	 * @param precision
	 *            实际长度
	 * @param scale
	 *            小数点位数
	 * @return
	 */
	public static String getDataType(String dataType, String precision, String scale) {
		if (dataType.equalsIgnoreCase("char") || dataType.equalsIgnoreCase("varchar2"))
			dataType = "java.lang.String";
		else if (dataType.equalsIgnoreCase("int"))
			dataType = "java.lang.Integer";
		else if (dataType.equalsIgnoreCase("float"))
			dataType = "java.lang.Float";
		else if (dataType.equalsIgnoreCase("double"))
			dataType = "java.lang.Double";
		else if (dataType.equalsIgnoreCase("number")) {
			if ((StringUtils.isNotBlank(scale)) && (Integer.parseInt(scale) > 0))
				dataType = "java.math.BigDecimal";
			else if ((StringUtils.isNotBlank(precision)) && (Integer.parseInt(precision) > 10))
				dataType = "java.lang.Long";
			else
				dataType = "java.lang.Integer";
		} else if (dataType.equalsIgnoreCase("decimal"))
			dataType = "BigDecimal";
		else if (dataType.equalsIgnoreCase("date"))
			dataType = "java.util.Date";
		else if (dataType.equalsIgnoreCase("time")) {
			dataType = "java.util.Date";
		} else if (dataType.equalsIgnoreCase("blob"))
			dataType = "byte[]";
		else if (dataType.equalsIgnoreCase("clob"))
			dataType = "java.sql.Clob";
		else if (dataType.equalsIgnoreCase("numeric"))
			dataType = "BigDecimal";
		else {
			dataType = "java.lang.Object";
		}
		return dataType;
	}

	/**
	 * 获取Java 类型名称
	 * 
	 * @return
	 */
	public static String getJavaType(String dataType) {
		if (dataType.equalsIgnoreCase("java.lang.Byte")) {
			dataType = "byte";
		} else if (dataType.equalsIgnoreCase("java.lang.Character")) {
			dataType = "char";
		} else if (dataType.equalsIgnoreCase("java.lang.Boolean")) {
			dataType = "boolean";
		} else if (dataType.equalsIgnoreCase("java.lang.Float")) {
			dataType = "float";
		} else if (dataType.equalsIgnoreCase("java.lang.Double")) {
			dataType = "double";
		} else if (dataType.equalsIgnoreCase("java.lang.Integer")) {
			dataType = "int";
		} else if (dataType.equalsIgnoreCase("java.lang.Long")) {
			dataType = "long";
		} else if (dataType.equalsIgnoreCase("java.lang.Short")) {
			dataType = "short";
		} else {
			dataType = dataType.substring(dataType.lastIndexOf(".") + 1);
		}
		return dataType;
	}
	/**
	 * 是否导入Import
	 * 
	 * @param dataType
	 * @return
	 */
	public static boolean isAddImports(String dataType) {
		if (!dataType.startsWith("java.lang")) {
			return true;
		}
		return false;
	}
	public static String addPackage(String packageName) {
		return Keyword.PACKAGE + PropertiesUtils.getString("package") + Symbols.SEMICOLON;
	}
	public static Set<String> addImports(List<Column> columns) {
		Set<String> imports = new HashSet<>();
		for (int i = 0; i < columns.size(); i++) {
			String datatype = getDataType(columns.get(i).getDataType(), columns.get(i).getPrecision(), columns.get(i).getScale());
			if (isAddImports(datatype))
				imports.add(Keyword.IMPORT + datatype + Symbols.SEMICOLON);
		}
		return imports;
	}
}
